package ar.com.cubika.trainees.bean.transportes.actividades;

import java.util.Collection;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;

import ar.com.cubika.trainees.bean.transportes.vehiculos.Vehiculo;
import ar.com.cubika.trainees.exceptions.BusinessException;

public class PlanEnViaje extends PlanDiario {

	private Collection<Viaje> viajes;
	
	/* (non-Javadoc)
	 * @see PlanDiario#PlanDiario(Vehiculo, Date)
	 */
	public PlanEnViaje(Vehiculo vehiculo, Date fecha) {
		super(vehiculo, fecha);
		this.viajes = new HashSet<Viaje>();
	}
	
	/**
	 * Le agregan un viaje al plan
	 */
	public void addViaje(Viaje viaje) {
		this.viajes.add(viaje);
	}
	
	/**
	 * Le agregan muchos viajes al plan de una.
	 */
	public void addViajes(Collection<Viaje> viajesIn) {
		this.viajes.addAll(viajesIn);
	}
	

	/* (non-Javadoc)
	 * @see ar.com.cubika.trainees.bean.transportes.actividades.PlanDiario#getActividades()
	 */
	public Collection<Actividad> getActividades() {
		this.checkConViajes();
		return new HashSet<Actividad>(viajes);
	}

	/* (non-Javadoc)
	 * @see ar.com.cubika.trainees.bean.transportes.actividades.PlanDiario#getDescripcionEstricta()
	 */
	public String getDescripcionEstricta() {
		this.checkConViajes();
		if (this.viajes.size() == 1) {
			return this.viajes.iterator().next().getDescripcion();
		} else {
			return this.viajes.size() + " viajes";
		}
		
	}

	/* (non-Javadoc)
	 * @see ar.com.cubika.trainees.bean.transportes.actividades.PlanDiario#getTiempoLibre()
	 */
	public double getTiempoOcupado() {
		this.checkConViajes();
		double sumaTiempoViajes = 0;
		for (Iterator viajesIt = this.viajes.iterator(); viajesIt.hasNext();) {
			Viaje viaje = (Viaje) viajesIt.next();
			sumaTiempoViajes += viaje.getTiempoEstimado();
		}
		return sumaTiempoViajes;
	}

	/* (non-Javadoc)
	 * @see ar.com.cubika.trainees.bean.transportes.actividades.PlanDiario#isLibre()
	 */
	public boolean isLibre() {
		return false;
	}

	private void checkConViajes() {
		if (viajes.isEmpty()) {
			throw new BusinessException(
					"Deben cargarse viajes en el plan " + 
					this.getDescripcionEstricta());
		}
	}

	
}
